<?php
/**
 * 观察者模式 - 主体逻辑
 * 场景：一个多级别的分销商城，如果用户付款订单的时候，使用观察者灵活扩展功能
 * 如：当有上级的时候 需要利润观察者为他的上级们划分利润。当商品有返回积分时，需要积分观察者为用户账号添加积分
 * User: Yan
 * Date: 2018/7/5 0005
 * Time: 下午 10:37
 */

namespace Yan;

include_once 'Gener.php';
include_once 'profitObserver.php';
include_once 'integralObserver.php';

class Page extends Gener
{
    public function pay()
    {
        $user = [
            'id'   => 59419979,
            "p_id" => 123
        ];

        # 产生一条新的订单
        $order = [
            'id'              => 1,     // 订单id
            'total_fee'       => 999,   // 总金额
            'goods'           => [
                '时尚大衣'
            ],  // 商品列表
            'user_id'         => 59419979,  // 用户id
            'return_integral' => 5,         // 订单返还5积分
        ];

        echo "会员-小宣言，购买了一件999元的衣服<br/>";

        # 判断条件 添加利润观察者
        if (!empty($user['p_id'])) {
            $this->addObserver(new profitObserver());
        }

        # 判断条件 添加积分观察者
        if (!empty($order['return_integral'])) {
            $this->addObserver(new integralObserver());
        }

        # 通知所有观察者
        $this->notify($order);
    }
}

$page = new Page();
$page->pay();